package cn.com.surker.enums;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author luotao
 * @date 2023/7/19
 */
public interface ICodeDescEnum {

	/**
	 * 获取描述信息
	 * @return 描述信息
	 */
	String getDescription();

	/**
	 * 获取枚举值
	 *
	 * @return 枚举值
	 */
	Integer getCode();

	/**
	 * 获取枚举中的值列表,以code="",desc=""的map格式返回
	 * @param clazz
	 * @param <T>
	 * @return
	 */
	static <T extends ICodeDescEnum> List<Map<String,Object>> getEnumDatas(Class<T> clazz){
		ICodeDescEnum[] enumConstants = clazz.getEnumConstants();
		List<Map<String,Object>> resList = new ArrayList<>();
		for (ICodeDescEnum item : enumConstants){
			Integer code = item.getCode();
			String description = item.getDescription();
			Map<String,Object> data = new HashMap<>();
			data.put(EnumField.CODE,code);
			data.put(EnumField.DESC,description);
			resList.add(data);
		}
		return resList;
	}
	static <T extends ICodeDescEnum> List<Map<String,Object>> getEnumDatasV1(Class<T> clazz){
		ICodeDescEnum[] enumConstants = clazz.getEnumConstants();
		List<Map<String,Object>> resList = new ArrayList<>();
		for (ICodeDescEnum item : enumConstants){
			Integer code = item.getCode();
			String description = item.getDescription();
			Map<String,Object> data = new HashMap<>();
			data.put(EnumField.ID,code);
			data.put(EnumField.NAME,description);
			resList.add(data);
		}
		return resList;
	}

	/**
	 * 根据枚举类型值,获取枚举
	 *
	 * @param clazz
	 * @param code
	 * @param <T>
	 * @return
	 */
	static <T extends ICodeDescEnum> T getEnum(Class<T> clazz, Integer code) {
		ICodeDescEnum[] enumConstants = clazz.getEnumConstants();
		for (ICodeDescEnum item : enumConstants) {
			Integer itemCode = item.getCode();
			if (itemCode.equals(code)) {
				T t = (T) item;
				return t;
			}
		}
		return null;
	}
}
